package com.pan;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

import java.io.File;

/**
 * -
 * <p>
 * By:panpan.wang 2019年11月28日
 */
public class Test {
    public static void change(String paths, String savepaths) {
        File d = new File(paths);
        // 取得当前文件夹下所有文件和目录的列表
        File lists[] = d.listFiles();
        String pathss = new String("");

        // 对当前目录下面所有文件进行检索
        for (int i = 0; i < lists.length; i++) {
            if (lists[i].isFile()) {
                String filename = lists[i].getName();
                String filetype = new String("");
                // 取得文件类型
                filetype = filename.substring((filename.length() - 3), filename
                        .length());
                // 判断是否为doc文件
                if (filetype.equals("doc")) {
                    System.out.println("当前正在转换......");
                    // 打印当前目录路径
                    System.out.println(paths);
                    // 打印doc文件名
                    System.out.println(filename.substring(0,
                            (filename.length() - 4)));

                    ActiveXComponent app = new ActiveXComponent(
                            "Word.Application");// 启动word

                    String docpath = paths + filename;
                    String htmlpath = savepaths
                            + filename.substring(0, (filename.length() - 4));

                    String inFile = docpath;
                    // 要转换的word文件
                    String tpFile = htmlpath;
                    // HTML文件

                    boolean flag = false;

                    try {
                        app.setProperty("Visible", new Variant(false));
                        // 设置word不可见

                        Object docs = app.getProperty("Documents").toDispatch();

                        Object doc = Dispatch.invoke(
                                (Dispatch) docs,
                                "Open",
                                Dispatch.Method,
                                new Object[]{inFile, new Variant(false),
                                        new Variant(true)}, new int[1])
                                .toDispatch();
                        // 打开word文件
                        Dispatch.invoke((Dispatch) doc, "SaveAs",
                                Dispatch.Method, new Object[]{tpFile,
                                        new Variant(8)}, new int[1]);
                        // 作为html格式保存到临时文件
                        Variant f = new Variant(false);
                        Dispatch.call((Dispatch) doc, "Close", f);
                        flag = true;
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {
                        app.invoke("Quit", new Variant[]{});
                    }
                    System.out.println("转化完毕！");
                }
            } else {
                pathss = paths;
                // 进入下一级目录
                pathss = pathss + lists[i].getName() + "\\";
                // 递归遍历所有目录
                change(pathss, savepaths);
            }
        }
    }

    public static void main(String[] args) {
        String paths = new String("D:\\");
        String savepaths = new String("D:\\");
        change(paths, savepaths);
    }
}
